    .arch armv5t
    @ comm section save global variable without initialization
    .comm n, 4
    .text
    .align 2
    @ rodata section save constant
    .section .rodata
    .align 2
_str0:
    .ascii "%d\0" @\000 is also one representation for `null character`
    .align 2
_str1:
    .ascii "%d\n"
    @ text section code
    .text
    .align 2
    
    .global main
main:
    push {fp, lr}
    add fp, sp, #4 @store fp
    ldr r1, _bridge @ r1 = &n
    ldr r0, _bridge+4 @ *r0 = "%d\0"
    bl __isoc99_scanf @ cin>>n;
    ldr r2, _bridge @ r2 = &n
    ldr r1, [r2] @ r1 = n
    mov r3, #2 @ i = 2
    mov r4, #1 @ f = 1 
.LOOP:  @i<=n
    mul r5, r4, r3 @ r5 = f * i
    mov r4, r5 @ f=f*i
    add r3, r3, #1 @ i = i + 1
    cmp r3, r1
    bls .LOOP
.END:   @i>n
    mov r1, r4 @ r1 = f
    ldr r0, _bridge+8 @ *r0 = "%d\n"
    bl printf  @ cout<<f<<endl;
    mov r0, #0
    pop {fp, pc} @ return 0

_bridge:
    .word n
    .word _str0
    .word _str1